package com.zykj.abstractfactory.yuanliao;

/**
 * @author zhoulj(周利军) [1217102780@qq.com]
 * @Title: YuanliaoFactory
 * @Project: ${MODEL_NAME}
 * @Module ID:   <(模块)类编号，可以引用系统设计中的类编号>
 * @Comments: <对此类的描述，可以引用系统设计中的描述>
 * @JDK version used:      <JDK1.8> 46
 * @since 2018/12/27-15:46
 */
//AbstractFactory
//TODO 抽象工厂模式：提供一个借口， 创建或依赖对象的家族， 而不需要指定具体的类 (生产一个家族 或说 一个系列的产品出来)
//
public interface YuanliaoFactory {

    //TODO 这里其实就是一个 工厂方法
    //  抽象工厂和工厂方法 的区别：
    //  1:工厂方法是通过子类的继承， 重写父类实例化过程（工厂方法）[只负责将客户端和具体类型解耦]， 而抽象方法 是通过组合 从而产生 一个家族的产品
    //  2:工厂方法是生产出一个对象， 而抽象工厂是生产出一系列对象
    //  重点：所有的工厂都是用来 封装对象的创建，减少程序与具体类的依赖（解耦）
    public Cheese createCheese();

    public Mianfen createMianfen();

    public Jiangyou createJiangyou();
}
